package ki;

import javax.imageio.metadata.IIOMetadataNode;

import org.w3c.dom.Node;

import utils.NimAlphaBetaCut;

import game.NimGame;

public class NimKI {
	public NimDecisionTree decisionTree;
	public NimGame game;
	private NimAlphaBetaCut searchAlgo;
	
	public NimKI(NimGame game) {
		this.decisionTree = new NimDecisionTree(game.getMaxRemove());
		this.searchAlgo = new NimAlphaBetaCut(decisionTree);
		this.game = game;
		
	}
	
	// a hello kitty gift for ole
	
	//defines how many sticks the ki will remove in the next turn
	public int getNextMove() {
		//building the decision tree for this state of the game
		
		//Node rootNode = this.decisionTree.buildDecisionTree(this.game.getSticks());
		Node rootNode = new IIOMetadataNode();
		rootNode.setNodeValue(String.valueOf(this.game.getSticks()));
		
		this.searchAlgo = new NimAlphaBetaCut(this.decisionTree);
		
		//TODO: hier muss der aufruf des alpha beta laufen. rootNode ist der aktuelle zustand des spieles und der root des suchbaumes. gesucht wird also auf tiefe = 1 nach der loesung.
		//im falle von nim ist die beste loesung IMMER im naechsten zug zu suchen, da es nur einen gewinnzustand gibt. verpasst man es diesen zu waehlen, gewinnt der 
		//gegner, wenn er die perfekte taktik kennt
		
		//ich stelle mir das so vor, dass der alpha beta den gewuenschten knoten zurueckgibt. in diesem knoten kann man mit 
		//getValue die anzahl der staebchen nach dem zug bekommen
		//dann this.game.getSTicks - StringToInt(naechterZugKnoten.getValue()) zurueckgeben. das it dann die anzahl der 
		//wegzunehmenden staebchen
		Node nextNode = this.searchAlgo.getBestTurn(rootNode);
		
		return this.game.getSticks() - Integer.parseInt(nextNode.getNodeValue());
	}

}
